package cn.xscrum.vtsp.controller;

import cn.xscrum.common.core.controller.BaseController;
import cn.xscrum.vtsp.service.IVtspVisualService;
import org.apache.commons.collections.map.HashedMap;
import cn.xscrum.vtsp.service.IVtspVolunteerStatisticService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.*;

/**
 * 可视化Controller
 *
 * @author wfs
 * @date 2021-10-09
 */
@Controller
@RequestMapping(value = "/vtsp/visual")
public class VtspVisualController extends BaseController
{

    //访问路径前缀
    private String prefix = "/vtsp/visual";

    @Autowired
    private IVtspVisualService visualService;

    @Autowired
    private IVtspVolunteerStatisticService volunteerStatisticService;

    /**
     * 请求地址为/vtsp/statistic/volunteerstatistic时跳转至/vtsp/statistic/volunteerstatistic/volunteerStatistic.html
     *
     * @return volunteerStatistic视图名
     */
    @RequiresPermissions("vtsp:visual:view")
    @GetMapping()
    public String visualStatistic()
    {
        return prefix + "/visual";
    }


    /**
     * 获取志愿者的各个学历层次的人数
     *
     * @return  各个学历段及其对应的志愿者人数的集合
     */
    @RequiresPermissions("vtsp:visual:view")
    @GetMapping("/getVolunteerDegreeVisual")
    @ResponseBody
    public List<Map<String,Object>> getVolunteerDegreeVisual()
    {
        return visualService.getVolunteerDegreeVisual();
    }

    /**
     * 获取志愿者的各个年龄段的人数
     *
     * @return  各个年龄段及其对应的志愿者人数的集合
     */
    @RequiresPermissions("vtsp:visual:view")
    @GetMapping("/getVolunteerAgeVisual")
    @ResponseBody
    public List<Map<String,Object>> getVolunteerAgeVisual()
    {
        return visualService.getVolunteerAgeVisual();
    }

    /**
     * 获取每年增加的志愿者人数
     *
     * @return  各个年份及其对应的志愿者人数的集合
     */
    @RequiresPermissions("vtsp:visual:view")
    @GetMapping("/getVolunteerGrowthTrendVisual")
    @ResponseBody
    public List<Map<String,Object>> getVolunteerGrowthTrendVisual()
    {
        return visualService.getVolunteerGrowthTrendVisual();
    }

    /**
     * 获取每个月开展志愿活动的次数
     *
     * @return 每个月份及其对应的支援活动次数的集合
     */
    @RequiresPermissions("vtsp:visual:view")
    @GetMapping("/getActivityGrowthTrendVisual")
    @ResponseBody
    public List<Map<String,Object>> getActivityGrowthTrendVisual()
    {
        return visualService.getActivityGrowthTrendVisual();
    }

    /**
     * 获取各个活动类型的的活动数
     *
     * @return  各个活动类型以及其活动数的集合
     */
    @RequiresPermissions("vtsp:visual:view")
    @GetMapping("/getActivityTypeVisual")
    @ResponseBody
    public List<Map<String,Object>> getActivityTypeVisual()
    {
        return visualService.getActivityTypeVisual();
    }

    /**
     * 获取各个地区的志愿者人数以及之原则服务总时长
     *
     * @return  各个地区及其对应的志愿者人数以及志愿者服务总时长的集合
     */
    @RequiresPermissions("vtsp:visual:view")
    @GetMapping("/getVolunteerAreaVisual")
    @ResponseBody
    public List<Map<String,Object>> getVolunteerAreaVisual()
    {
        List<Map<String, Object>> volunteerCollegeDistribution = visualService.getVolunteerAreaVisual();
        //查询各个国家的志愿者人数以及总服务时长
        List<Map<String, Object>> localList = visualService.getVolunteerAreaVisual();
        //volunteerAreaVisual用于存储各个国家及其对应的志愿者人数
        List<Map<String,Object>> volunteerAreaVisual = new ArrayList<>();

        for (int i=0;i<localList.size();i++)
        {
            //map用于各个国家的志愿者及其总服务时长
            Map<String, Object> map = new HashMap<String, Object>();
            //将国家id强制转换为整数类型
            Integer areasId = Integer.parseInt(String.valueOf(localList.get(i).get("areasId")));

            //将国家名称和志愿者人数添加到map中
            map.put("areaName",volunteerStatisticService.getCountryName(areasId));
            map.put("number",localList.get(i).get("number"));
            map.put("serveTime",localList.get(i).get("serveTime"));

            //将map添加到volunteerAreaVisual中
            volunteerAreaVisual.add(map);
        }
        return volunteerAreaVisual;
    }

    /**
     * 获取近十二个月每个月服务对象的人数
     *
     * @return  近十二个月以及每个月服务对象的人数的集合
     */
    @RequiresPermissions("vtsp:visual:view")
    @GetMapping("/getServiceObjectVisual")
    @ResponseBody
    public List<Map<String,Object>> getServiceObjectVisual()
    {
        //serviceObjectList用于存储从数据库获取的近12个月服务对象的人数
        List<Map<String,Object>> serviceObjectList = visualService.getServiceObjectVisual();

        //将serviceObjectList逆序输出
        Collections.reverse(serviceObjectList);
        return serviceObjectList;
    }

    /**
     * 获取志愿者总人数
     *
     * @return  志愿者的总数
     */
    @RequiresPermissions("vtsp:visual:view")
    @GetMapping("/getVolunteerSumVisual")
    @ResponseBody
    public Integer getVolunteerSumVisual()
    {
        return visualService.getVolunteerSumVisual();
    }

    /**
     * 获取活动总数
     *
     * @return  活动的总数
     */
    @RequiresPermissions("vtsp:visual:view")
    @GetMapping("/getActivitySumVisual")
    @ResponseBody
    public Integer getActivitySumVisual()
    {
        return visualService.getActivitySumVisual();
    }

    /**
     * 志愿者注册总次数
     *
     * @return  志愿者注册总次数
     */
    @RequiresPermissions("vtsp:visual:view")
    @GetMapping("/getVolunteerRegisterNumberVisual")
    @ResponseBody
    public Integer getVolunteerRegisterNumberVisual()
    {
        return visualService.getVolunteerRegisterNumberVisual();
    }


}
